#ifndef FREE_CAMERA_H
#define FREE_CAMERA_H

#include "Vectors.h"
#include "Matrices.h"
#include "ICamera.h"

namespace steam
{
	namespace moon
	{
		class FreeCamera : public ICamera
		{
		protected:
			const float LookSpeed;
			const float MoveSpeed;
			const float PitchClampInRadian;
			const float YawClampInRadian;

			base::Vector3 m_Position;
			base::Vector3 m_Forward;
			base::Vector3 m_Right;
			base::Vector3 m_Up;

			float m_AngleX;
			float m_AngleY;

			//bool m_MoveOnlyOnHorizontalPlane;
			bool keys[4];

		public:
			FreeCamera();
			FreeCamera(base::Vector3 position, float yawAngle, float pitchAngle);
			~FreeCamera();

			void update();
			//void setMoveOnlyOnHorizontalPlane(bool flag);

			const base::Vector3& getPosition() const;

			const base::Vector3& getForward() const;

			void init(base::Vector3 position, float yawAngle, float pitchAngle);

			void keyPressed( const intake::KeyEvent* evt );

			void keyReleased( const intake::KeyEvent* evt );

		};

	}

}


#endif